package com.datasource;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * @author linyukun
 * @date 2022/7/6 17:10
 */
//DynamicDataSource这个bean是在DynamicDataSourceRegister这个类下面定义的
public class DynamicDataSource extends AbstractRoutingDataSource {
    //默认数据源在 DynamicDataSourceRegister 这个类下面

    /**
     *  https://blog.csdn.net/qq_37502106/article/details/91044952
     *  ThreadLocal 用于提供线程局部变量，在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。
     * 也就是说 ThreadLocal 可以为每个线程创建一个【单独的变量副本】，相当于线程的 private static 类型变量。
     */
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    @Override
    protected Object determineCurrentLookupKey() {
        //AbstractRoutingDataSource这个的重写方法 链接mybatis的时候 会进入这个 可以看着里面的代码
        return getDataSourceType();
    }

    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    public static String getDataSourceType() {
        return contextHolder.get();
    }

    public static void clearDataSourceType() {
        contextHolder.remove();
    }

}
